package com.xijia;

import java.io.*;


/**
 * 序列化破解单列 （当类添加了 implements Serializable 的，都将可以破解单列）
 * @author wangsong
 * @date 2020/9/5 0005 10:26
 * @return
 * @version 1.0.0
 */
public class Test002 {
    public static void main(String[] args) throws Exception {
        // 1.需要将该对象序列化到本地存放
        FileOutputStream fos =  new FileOutputStream("d:/code/user.txt");
        ObjectOutputStream oos = new ObjectOutputStream(fos);
        Singleton01 instance1 = Singleton01.getInstance();
        oos.writeObject(instance1);
        oos.close();
        fos.close();
        //2.从硬盘中反序列化对象到内存中
        ObjectInputStream ois = new ObjectInputStream(new FileInputStream("d:/code/user.txt"));
        Singleton01 instance2 = (Singleton01) ois.readObject();
        /**
         * 将输出false， 单列对象 Singleton01 被重复创建, singleton01 在静态区的值被重新初始化，原数据将被破坏
         */
        System.out.println(instance1==instance2);

    }
}


//    /**
//     * 序列化生产回调方法 通过该方法 实现反序列生产单例对象
//     * 名称 一定写死readResolve
//     *
//     * @return
//     */
//    public Object readResolve() {
//        return singleton01;
//    }